home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 46 / Amiga Format CD46 (1999-10-20)(Future Publishing)(GB)[!][issue 1999-12].iso / -serious- / programming / other / tandem / support / tanlib.i < prev   
Text File  |  1999-09-06  |  37KB  |  1,533 lines

  1. ****************************************************************************
  2. **                                         Append to Amiga3.1.asm
  3. **  tanlib.i     revision 1.85  28. 4.99   sc         B0000  labs ptrs 20000
  4. **                                         asm lines 100000  labs asci 40000
  5. ****************************************************************************
  6.  
  7. xxp_lver: SET 37           ;min version for Amiga libs     (=release  2.04)
  8. xxp_tver: SET 37           ;min version for tandem.library (=release  1)
  9.  
  10. ; Data used by Front.i and tandem.library
  11. ;    Front.i creates an instance of this structure in a 1024 byte stack
  12. ;    frame, and calls Program with A4 pointing to it.
  13.  
  14.  STRUCTURE xxp_tndm,0
  15.  
  16. ;system information
  17.  
  18.  STRUCT xxp_buff,512       ;general purpose scratchpad
  19.  WORD xxp_tand             ;<> if running under Tandem (i.e. debugging)
  20.  WORD xxp_user             ;for applications (Tandem.i leaves alone)
  21.  APTR xxp_bnch             ;startup msg if under workbench, 0 if under CLI
  22.  STRUCT xxp_A0D0,8         ;A0,D0 on startup (CLI params if xxp_bnch=0)
  23.  APTR xxp_sysb             ;base of system.library (cache of _AbsExecBase)
  24.  APTR xxp_dosb             ;base of dos.library
  25.  APTR xxp_intb             ;base of intuition.library
  26.  APTR xxp_gfxb             ;base of graphics.library
  27.  APTR xxp_aslb             ;base of asl.library
  28.  APTR xxp_gadb             ;base of gadtools.library
  29.  APTR xxp_tanb             ;base of tandem.library
  30.  APTR xxp_oput             ;CLI output stream/Workbench monitor
  31.  APTR xxp_iput             ;CLI  input stream/Workbench monitor
  32.  LONG xxp_memk             ;memkey for AllocRemember
  33.  LONG xxp_cdir             ;<> if user has changed the CD (init CD here)
  34.  LONG xxp_hndl             ;handle from TLOpenread/write
  35.  APTR xxp_strg             ;pointer to strings table in user program
  36.  WORD xxp_ackn             ;Program sets to string num of closedown msg
  37.  
  38. ; Data initialised at first call to TLWindow (or via TLReq....)
  39. ;    Front0.i sets xxp_Screen to null to show all inoperative
  40. ;    If user wants other than workbench screen, poke it to xxp_Screen, and:
  41. ;      xxp_Public=0  when Front0.i will close xxp_Screen after Program rts's
  42. ;      xxp_Public=-1 when Front0.i will leave xxp_Screen alone
  43.  
  44.  APTR xxp_Screen     ;the screen used for TL calls
  45.  APTR xxp_vi         ;  GadTools vi for xxp_Screen
  46.  LONG xxp_Width      ;  screen width
  47.  LONG xxp_Height     ;  screen height
  48.  LONG xxp_Depth      ;  screen depth
  49.  APTR xxp_EBmap      ;Double buffering area used by TLReqedit bitmap
  50.  APTR xxp_ERport     ;  rastport
  51.  LONG xxp_ehgt       ;  height
  52.  LONG xxp_ewid       ;  width
  53.  APTR xxp_FSuite     ;Instance of an xxp_fsui structure (see below)
  54.  LONG xxp_Stak       ;Caller d0-d7/a0-a6 set by requesters for hooks
  55.  APTR xxp_FWork      ;Used by TLReqedit, &c (see below)
  56.  APTR xxp_WSuite     ;Instance of an xxp_wsui structure (see below)
  57.  APTR xxp_AcWind     ;  Address of currently active window in xxp_WSuite
  58.  WORD xxp_Active     ;  its window num; -1 if none active
  59.  WORD xxp_Public     ;for TLWclose: 2=close xxp_Screen; 1=leave alone
  60.  WORD xxp_Pop        ;window num to pop for requesters
  61.  LONG xxp_Help       ;first line, number of lines, of help
  62.  WORD xxp_ReqNull    ;set <>0 to enable requesters, 0 to disable
  63.  
  64. ;sundry data for internal use by TL routines
  65.  
  66.  LONG xxp_tbbw            ;tabs total width
  67.  LONG xxp_tbbh            ;     total height
  68.  LONG xxp_tblw            ;     individual width
  69.  LONG xxp_tblh            ;     individual height
  70.  STRUCT xxp_kybd,16       ;D0-D3 returned by TLKeyboard
  71.  LONG xxp_crsr            ;cursor tab (0+)
  72.  LONG xxp_tbss            ;tabs string num with thumbtag labels
  73.  LONG xxp_valu            ;  value of number input
  74.  LONG xxp_chnd            ;  <> if input string changed
  75.  LONG xxp_lins            ;TLMultiline no. of lines in xxp_Mmem
  76.  LONG xxp_guid            ;path of AmigaGuide invoked by TLHelp
  77.  LONG xxp_node            ;node of AmigaGuide invoked by TLHelp
  78.  LONG xxp_gide            ;workspace to TLGide
  79.  LONG xxp_mmtp            ;unused
  80.  STRUCT xxp_rnge,8        ;unused
  81.  LONG xxp_glob            ;unused
  82.  STRUCT xxp_patt,32       ;TLMultiline,TLReqshow string sought
  83.  LONG xxp_errn            ;Error number
  84.  LONG xxp_rinf            ;TLReqshow data extent pointer
  85.  LONG xxp_Hook            ;TLReqshow callback hook
  86.  
  87. ; data for requester buttons
  88.  
  89.  LONG xxp_reqx            ;Requester  xpos      *** Caution: do not
  90.  LONG xxp_reqy            ;  ypos               *** interpose noew items
  91.  LONG xxp_reqw            ;  width              *** between reqx and butl
  92.  LONG xxp_reqh            ;  height
  93.  LONG xxp_butx            ;Button set  xpos
  94.  LONG xxp_buty            ;  ypos
  95.  LONG xxp_butw            ;  width
  96.  LONG xxp_buth            ;  height
  97.  LONG xxp_btdx            ;  dx
  98.  LONG xxp_btdy            ;  dy
  99.  LONG xxp_butk            ;  buttons in row
  100.  LONG xxp_butl            ;  no. of rows
  101.  
  102. ; printer data
  103.  
  104.  WORD xxp_styl            ;unused
  105.  BYTE xxp_lppg            ;printer lines/page
  106.  BYTE xxp_marg            ;printer margins
  107.  BYTE xxp_cpln            ;printer chrs/line
  108.  BYTE xxp_pica            ;print -1=pica 0=elite
  109.  
  110. ; output of xxp_TSize
  111.  
  112.  LONG xxp_wdth            ;output of xxp_TSize  D4 = width
  113.  LONG xxp_chrs            ;  D5 = chrs
  114.  LONG xxp_ysiz            ;  D6 = ysiz
  115.  LONG xxp_basl            ;  D7 = baseline
  116.  
  117.  STRUCT xxp_fil1,2        ;(unused)
  118.  
  119. ;data for requester sliders
  120.  
  121.  LONG xxp_slix            ;Slider  xpos
  122.  LONG xxp_sliy            ;        ypos
  123.  LONG xxp_sliw            ;        width
  124.  LONG xxp_slih            ;        height               TLReqshow
  125.  LONG xxp_otop            ;(unused)
  126.  LONG xxp_tops            ; Value  slide top        {num of top string shown
  127.  LONG xxp_totl            ;        total            {total strings
  128.  LONG xxp_strs            ;        slide            {strings on screen
  129.  LONG xxp_lcom            ;                         {line to be complemented
  130.  LONG xxp_hook            ; hook to call when slider moves
  131.  
  132. ;sundry data
  133.  
  134.  APTR xxp_busy            ;TLBusy chip memory
  135.  APTR xxp_hook0           ;called by TLReqchek if set
  136.  APTR xxp_hook1           ;called by TLReqon if set
  137.  APTR xxp_hook2           ;called by TLHook2 if set
  138.  
  139. ;data for opening printer.device
  140.  
  141.  APTR xxp_requ            ;printer request
  142.  LONG xxp_sigb            ;signal bit
  143.  WORD xxp_devo            ;<> if printer open
  144.  STRUCT xxp_rept,MP_SIZE  ;message port(=34)
  145.  
  146. ;misc data
  147.  APTR xxp_splc            ;data for spell.library
  148.  LONG xxp_about           ;about line, numlines for TLMultiline
  149.  
  150. ;data for TLProgress
  151.  STRUCT xxp_prgd,16       ;xpos,ypos,wdth,hght of thermometer
  152.  STRUCT xxp_prgi,4        ;(unused)
  153.  
  154. ;misc data
  155.  LONG xxp_gadg            ;if <>, gadgets for TLWindow
  156.  APTR xxp_slid            ;instance of an xxp_slis structure, or 0
  157.  APTR xxp_mesg            ;most recent IntuiMessage from TLMmess
  158.  APTR xxp_pref            ;GUI prefs (an xxp_yprf structure)
  159.  STRUCT xxp_prfp,8        ;used by TLReqon, &c (operative xxp_prefs data)
  160.  APTR xxp_pixx            ;chip mem for .pix in TLWindow
  161.  
  162.  STRUCT xxp_fil0,22       ;(unused)
  163.  
  164.  LABEL xxp_size           ;must not exceed 1024
  165.  
  166. * Structure of memory pointed to by xxp_WSuite
  167.  
  168. ; sub-structures pointed to by xxp_wsui - data for each window
  169.  
  170.  STRUCTURE xxp_wsuw,0
  171.  
  172. ;data for TLReqedit,TLText,&c (TLReqedit,TLText,&c also use xxp_Wport)
  173.  BYTE xxp_FrontPen   ; } pens & drawmode
  174.  BYTE xxp_BackPen    ; }
  175.  BYTE xxp_DrawMode   ; }
  176.  BYTE xxp_Kludge     ; }
  177.  WORD xxp_LeftEdge   ; } These are set to top left of printable area
  178.  WORD xxp_TopEdge    ; }
  179.  WORD xxp_xmin       ; } xmin underlap found in last TLTsize (+ve)
  180.  WORD xxp_xmax       ; } xmax overlap found in lst TLTsize (+ve)
  181.  APTR xxp_IText      ; } null delimited ASCII to be printed
  182.  WORD xxp_Fnum       ; } font number for window
  183.  WORD xxp_Attc       ; } -1 if new Fnum, else operative Fsty
  184.  WORD xxp_Fsty       ; } font style (0-3 for xxp_plain &c)  } supplementary
  185.  WORD xxp_Tspc       ; } text spacing                       } to above
  186.  
  187. ;other data for the window
  188.  LONG xxp_Window     ;the window's own address (0 if unopened)
  189.  LONG xxp_Menu       ;menu created by TLReqmenu (must not be shared)
  190.  WORD xxp_Menuon     ;<> if xxp_Menu attached
  191.  WORD xxp_PWidth     ; } current window print width (width-borders)
  192.  WORD xxp_PHeight    ; } current window print height (height-borders)
  193.  APTR xxp_WPort      ;window rastport
  194.  LONG xxp_Wcheck     ;window dims used by TLWcheck
  195.  WORD xxp_ReqLeft    ;requester lhs
  196.  WORD xxp_ReqTop     ;requester top
  197.  
  198. ;data used by TLMultiline
  199.  APTR xxp_Mmem       ;<>0 if mem addr for TLMultiline    } applicable if
  200.  LONG xxp_Mmsz       ;memsize (if xxp_Mmem<>0)           } TLMultiline
  201.  LONG xxp_Mtop       ;addr top of lines (if mmp_Mmem<>0) } called for this
  202.  LONG xxp_Mcrr       ;line num w. cursor                 } window, else
  203.  WORD xxp_Mmxc       ;max characters in line             } xxp_Mmem=0
  204.  LONG xxp_Mtpl       ;topline shown on window            }
  205.  
  206. ;Window refresh
  207.  APTR xxp_Refr       ;TLKeyboard window refresh (not usually used)
  208.  APTR xxp_scrl       ;an xxp_scro structure (null if no scroll bars)
  209.  
  210.  LONG xxp_shad       ;shadow font: 0unused 1pen 2dy 1dx
  211.  LONG xxp_Styl       ;(unused)
  212.  
  213. ;data passed from windows 0-9 to windows 10,11 (i.e. requesters,help)
  214.  WORD xxp_RFont      ;requesters fontnum         } When a requester or
  215.  WORD xxp_HFont      ;      help fontnum         } TLHelp is invoked, this
  216.  WORD xxp_RTspc      ;requesters xxp_Tspc        } data from xxp_AcWind (if
  217.  WORD xxp_HTspc      ;      help xxp_Tspc        } any window is active) is
  218.  WORD xxp_RFsty      ;requesters xxp_Fsty        } passed to window 10
  219.  WORD xxp_HFsty      ;      help xxp_Fsty        } or 11.
  220.  
  221.  LABEL xxp_siz2
  222.  
  223. ; the structure pointed to by xxp_WSuite
  224.  
  225.  STRUCTURE xxp_wsui,0      ;(consists of 12 xxp_wsuw structures)
  226.  STRUCT xxp_ws00,xxp_siz2  ;windows 0-9
  227.  STRUCT xxp_ws01,xxp_siz2
  228.  STRUCT xxp_ws02,xxp_siz2
  229.  STRUCT xxp_ws03,xxp_siz2
  230.  STRUCT xxp_ws04,xxp_siz2
  231.  STRUCT xxp_ws05,xxp_siz2
  232.  STRUCT xxp_ws06,xxp_siz2
  233.  STRUCT xxp_ws07,xxp_siz2
  234.  STRUCT xxp_ws08,xxp_siz2
  235.  STRUCT xxp_ws09,xxp_siz2
  236.  STRUCT xxp_ws10,xxp_siz2  ;used for requesters
  237.  STRUCT xxp_ws11,xxp_siz2  ;use for help
  238.  LABEL xxp_siz3
  239.  
  240. * Structure of font suite & .styl data (pointed to by xxp_FSuite,xxp_FWork)
  241.  
  242. ; sub-structure of xxp_fsui for each font
  243.  
  244.  STRUCTURE xxp_fsuf,0      ;structure of xxp_FSuite entries
  245.  STRUCT xxp_attr,8         ;TextAttr for the font
  246.  STRUCT xxp_fnam,32        ;the fontname
  247.  APTR xxp_plain            ;addr of normal size       (0 if unopened)
  248.  APTR xxp_bold             ;addr of double width      (0 if unopened)
  249.  APTR xxp_ital             ;addr of half height       (0 if unopened)
  250.  APTR xxp_boit             ;addr of dbl wdth + hlf ht (0 if unopened)
  251.  LABEL xxp_fsiz            ;=56
  252.  
  253. ; the structure pointed to by xxp_FSuite
  254.  
  255.  STRUCTURE xxp_fsui,0      ;(consists of 10 xxp_fsuf structures)
  256.  STRUCT xxp_fs00,xxp_fsiz  ;font 0 - always Topaz/8
  257.  STRUCT xxp_fs01,xxp_fsiz
  258.  STRUCT xxp_fs02,xxp_fsiz
  259.  STRUCT xxp_fs03,xxp_fsiz
  260.  STRUCT xxp_fs04,xxp_fsiz
  261.  STRUCT xxp_fs05,xxp_fsiz
  262.  STRUCT xxp_fs06,xxp_fsiz
  263.  STRUCT xxp_fs07,xxp_fsiz
  264.  STRUCT xxp_fs08,xxp_fsiz
  265.  STRUCT xxp_fs09,xxp_fsiz
  266.  STRUCT xxp_fs10,xxp_fsiz  ;font 10 - default requesters
  267.  STRUCT xxp_fs11,xxp_fsiz  ;font 11 - default Reqshow
  268.  LABEL xxp_siz4            ;=672
  269.  
  270. ; the structure pointed by xxp_FWork
  271.  
  272. ; bytes 0-1799     used by TLReqedit
  273. ; bytes 1800-2399  used by TLMultiline
  274.  
  275. xxp_siz5 equ 2400
  276.  
  277. * default values
  278. xxp_ewiv: SET 1280         ;default xxp_ewid (160*8) } 20480 bytes/plane
  279. xxp_ehgv: SET 128          ;default xxp_ehgt         }
  280. xxp_col1: SET $01000200    ;default xxp_colr   (1,0 2,0)
  281. xxp_col2: SET $03000103    ;default xxp_colr+4 (3,0 1,3)
  282.  
  283. * the data pointed to by xxp_splc (used by spell.library)
  284.  STRUCTURE xxp_Spel,0
  285.  APTR xxp_dict           ;address of spelling diectionary
  286.  LONG xxp_dics           ;size of sp_dict
  287.  APTR xxp_priv           ;address of private list (0 if none)
  288.  APTR xxp_prit           ;top  of sp_priv
  289.  LONG xxp_pris           ;size of sp_priv memory
  290.  APTR xxp_temp           ;address of temporary list
  291.  APTR xxp_temt           ;top  of sp_temp
  292.  LONG xxp_tems           ;size of sp_temp
  293.  APTR xxp_clog           ;address of corrections log
  294.  APTR xxp_clot           ;top  of sp_clot
  295.  LONG xxp_clos           ;size of sp_clot
  296.  APTR xxp_comm           ;address of common errors
  297.  APTR xxp_comt           ;top  of sp_comm
  298.  LONG xxp_coms           ;size of sp_comm
  299.  APTR xxp_spel           ;address of line(s) to spell check } used only
  300.  APTR xxp_splt           ;top  of sp_spel                   }   by
  301.  LONG xxp_spls           ;size of sp_spel                   } TLSpelchek
  302.  BYTE xxp_case           ;case checking:    -1,0,1=ignore/correct/query
  303.  BYTE xxp_ctxt           ;context display   -1,0,1=none/errors/all
  304.  BYTE xxp_pryn           ;private list      -1,1=yes/no
  305.  BYTE xxp_tpyn           ;temporary list    -1,1=yes/no
  306.  BYTE xxp_cmyn           ;common errors     -1,1=yes/no
  307.  BYTE xxp_lgyn           ;log or changes    -1,1=yes/no
  308.  BYTE xxp_klu0           ;(unused)
  309.  BYTE xxp_klu1           ;(unused)
  310.  STRUCT xxp_word,30      ;word to be checked
  311.  STRUCT xxp_sugg,70      ;suggestions for xxp_word
  312.  STRUCT xxp_swrk,8       ;internal use
  313.  APTR xxp_dptr           ;dict pointers  } These can be removed by AllocVec,
  314.  APTR xxp_pptr           ;priv pointers  } when 0 must be poked to here.
  315.  STRUCT xxp_pdir,130     ;xxp_priv directory
  316.  STRUCT xxp_pfil,34      ;xxp_priv file
  317.  STRUCT xxp_ddir,130     ;xxp_dict directory
  318.  STRUCT xxp_dfil,34      ;xxp_dict file
  319.  LABEL xxp_spsz          ; = 520 to end of xxp_dfil
  320.  
  321. * tags for TLreqedit
  322. xxp_xtext: equ 1            ;Address of text, e.g. xxp_FWork  dflt buff
  323. xxp_xstyl: equ 2            ;Address of styl, e.g. xxp_FWork+256  dflt all 0
  324. xxp_xmaxt: equ 3            ;Maximum width of tablet  dflt max possible
  325. xxp_xmaxc: equ 4            ;Maximum characters  dflt 255
  326. xxp_xmaxw: equ 5            ;Max text width  (no dflt - use xxp_xmaxc)
  327. xxp_xcrsr: equ 6            ;initial cursor posn  -1 for none  dflt 0
  328. xxp_xoffs: equ 7            ;fixed offset  -1 for none  dflt -1
  329. xxp_xforb: equ 8            ;forbids (see below)  dflt all
  330. xxp_xtask: equ 9            ;task 0-3 (see below)  dflt 0
  331. xxp_xcomp: equ 10           ;-1=complement  0=don't complement  dflt 0
  332. xxp_xnprt: equ 11           ;-1=don't print  0=print  dflt 0
  333. xxp_xfont: equ 12           ;fontnum  dflt 0
  334. xxp_xcspc: equ 13           ;cspace  dflt 0
  335. xxp_xmaxj: equ 14           ;max fjust spacing  0=force  dflt 5
  336. xxp_xltyp: equ 15           ;initial ltype (see below)  dflt 0
  337. xxp_xkybd: equ 16           ;crsr xpos in pixels, dlft use xxp_xcrsr
  338.                             ;(17 unused)
  339. xxp_xiclr: equ 18           ;-1=clear tablet before starting  dflt 0
  340. xxp_xtral: equ 19           ;-1=remove trailing spaces before RTS  dflt=0
  341. xxp_xshdv: equ 20           ;shadow: 0,pen,dy,dx   dflt xxp_shad -> 00020102
  342. xxp_xresz: equ 21           ;0=resize forbid, -1=resize cont, dflt 0
  343. xxp_xmenu: equ 22           ;menu num (if any) of "Text Format" menu
  344. xxp_xfgbg: equ 23           ;0,0,foreground pen,background pen (dflt wsuw)
  345. xxp_xffix: equ 24           ;-1=force fixed width  dflt 0
  346. xxp_xjam1: equ 25           ;-1=jam1  0=jam2  dflt 0
  347. xxp_xcase: equ 26           ;0=normal  1=ucase  2=lcase  3=small cap  dflt 0
  348. xxp_xstyb: equ 27           ;lsb of argument = styl of all bytes dflt 0
  349. xxp_xrevs: equ 28           ;-1=reverse (right to left) printing
  350.  
  351. * TLReqedit xxp_xforb forbid bits (OR them together)
  352. xxp_xesty: equ $0FFF        ;disable all changes to styl
  353.  
  354. xxp_xbold: equ $0001        ;disable  Ctrl B bold
  355. xxp_xital: equ $0002        ;disable  Ctrl I italic
  356. xxp_xundl: equ $0004        ;disable  Ctrl U underline, strike thru
  357. xxp_xdubl: equ $0008        ;disable  Ctrl W wide
  358. xxp_xfixt: equ $0010        ;disable  Ctrl P force fixed
  359. xxp_xshad: equ $0020        ;disable  Ctrl S shadow
  360. xxp_xrjst: equ $0040        ;disable  Ctrl R right just
  361. xxp_xfjst: equ $0080        ;disable  Ctrl J full just
  362. xxp_xcent: equ $0100        ;disable  Ctrl C centre
  363. xxp_xljst: equ $0200        ;disable  Ctrl L left just
  364. xxp_xcmpj: equ $0400        ;disable  Shift Ctrl C complement
  365. xxp_xsusb: equ $0800        ;disable  Ctrl up/down arrow   super/sub script
  366. xxp_xunrm: equ $1000        ;disable return if menu select
  367. xxp_xunre: equ $2000        ;disable return if unknown Ctrl key
  368. xxp_xunrc: equ $4000        ;disable return if unknown other than Ctrl
  369.  
  370. * TLMultiline forbid &c bits
  371. xxp_xmsty: equ $FFF0        ;disable all changes to styl
  372.  
  373. xxp_xchnd: equ $0001        ;<> = text changed (on return)(ignored on call)
  374. xxp_xunsv: equ $0002        ;<> = text unsaved (on call & return)
  375.  
  376. xxp_xpage: equ $0010        ;disable paging
  377. xxp_xblok: equ $0020        ;disable blocking
  378. xxp_xspce: equ $0040        ;disable lspace
  379. xxp_xspac: equ $0080        ;disable cspace
  380. xxp_xjust: equ $0100        ;disable fjst change
  381. xxp_xpens: equ $0200        ;disable pens
  382. xxp_xcols: equ $0400        ;(unused)
  383. xxp_xpict: equ $0800        ;disable graphics
  384. xxp_xfnts: equ $1000        ;disable font select
  385. xxp_xrend: equ $2000        ;(unused)
  386.  
  387. xxp_xchng: equ $80000000    ;disable all alterations to text
  388.  
  389. * TLReqedit xxp_xtask task values
  390. xxp_xtstr: equ 0            ;string - no continuation line
  391. xxp_xtcon: equ 1            ;string - continuation line
  392. xxp_xtdec: equ 2            ;number - decimal number    } return value in
  393. xxp_xthex: equ 3            ;number - hex number        } xxp_valu
  394.  
  395. * TLReqedit xxp_xltyp initial justification values
  396. xxp_xleft: equ 0            ;left justification  } Final value in
  397. xxp_xcntr: equ 1            ;centre              } bits 8-9 of
  398. xxp_xrght: equ 2            ;right justification } xxp_chnd
  399. xxp_xfull: equ 3            ;full justification  }
  400.  
  401. * TLReqedit xxp_xstyl bits
  402. xxp_xbit0: equ 0            ;bold
  403. xxp_xbit1: equ 1            ;italic
  404. xxp_xbit2: equ 2            ;underline   } 0001 und  0011 ovr   0101 und+ovr
  405. xxp_xbit3: equ 3            ;superscript } 0010 sup  0111 dbl und + ovr
  406. xxp_xbit4: equ 4            ;subscript   } 0100 sub  0110 dbl und
  407. xxp_xbit5: equ 5            ;dot underlin} 1000 dot  1001 thru
  408. xxp_xbit6: equ 6            ;shadow font
  409. xxp_xbit7: equ 7            ;double width
  410.  
  411. * TLreqedit return codes
  412. xxp_xrtn: equ 0             ;return / accept
  413. xxp_xesc: equ 1             ;Esc    / cancel
  414. xxp_xnpr: equ 2             ;tagged no print
  415. xxp_xncr: equ 3             ;tagged no cursor
  416. xxp_xcnt: equ 4             ;contin line formed (without pressing return)
  417. xxp_xclk: equ 5             ;left mouse button while pointer off tablet
  418. xxp_xmnu: equ 6             ;user made menu selection
  419. xxp_xunk: equ 7             ;unknown keyboard input (e.g. left/right Amiga)
  420. xxp_xnrr: equ 8             ;window became too narrow
  421. xxp_xshl: equ 9             ;window became too shallow
  422. xxp_xoff: equ 10            ;can't obey fixed offset
  423. xxp_xfnt: equ 11            ;can't attach font (out of memory)
  424.  
  425. * data pointed to by xxp_slid
  426.  STRUCTURE xxp_slis,0
  427.  LONG xxp_draw             ;screen DrawInfo
  428.  APTR xxp_szob             ;Size Object
  429.  APTR xxp_lfob             ;Left Object
  430.  APTR xxp_rtob             ;Right Object
  431.  APTR xxp_upob             ;Up Object
  432.  APTR xxp_dnob             ;Down Object
  433.  APTR xxp_ckob             ;Check Object
  434.  LONG xxp_psec             ;prefs keyboard repeat secs
  435.  LONG xxp_pmic             ;                      micros
  436.  LONG xxp_asec             ;last boopsi message   secs
  437.  LONG xxp_amic             ;                      micros
  438.  LABEL xxp_slsz            ;Size of xxp_slis
  439.  
  440. * data pointed to by xxp_scrl
  441.  STRUCTURE xxp_scro,0
  442.  APTR xxp_scoh             ;horizontal scroller object
  443.  APTR xxp_slfo             ;  left object
  444.  APTR xxp_srto             ;  right object
  445.  APTR xxp_scov             ;vertical scroller object
  446.  APTR xxp_supo             ;  up object
  447.  APTR xxp_sdno             ;  down object
  448.  APTR xxp_gcnt             ;gadtools context
  449.  LONG xxp_hztp             ;horizontal top
  450.  LONG xxp_hzvs             ;           visible
  451.  LONG xxp_hztt             ;           total
  452.  LONG xxp_vttp             ;vertical   top
  453.  LONG xxp_vtvs             ;           visible
  454.  LONG xxp_vttt             ;           total
  455.  LABEL xxp_scrs            ;size of xxp_scro
  456.  
  457. * structure to hold GUI prefs (in xxp_pref)
  458.  STRUCTURE xxp_yprf,0      ;GUI prefs
  459.  STRUCT xxp_yfon,32        ;requester fontname
  460.  WORD xxp_yhgt             ;          fontheight
  461.  BYTE xxp_ysty             ;          fontstyle
  462.  BYTE xxp_yspc             ;          fontspacing
  463.  STRUCT xxp_yfsh,32        ;show data fontname (height 8)
  464.  STRUCT xxp_ychs,8         ;choose  bkgrnd,titl,txt pens; horz,vrt gaps; 000
  465.  STRUCT xxp_yinp,8         ;input   ditto
  466.  STRUCT xxp_yinf,8         ;info    ditto
  467.  STRUCT xxp_yprg,8         ;prog    ditto  (no title, horz=prgress, no vert)
  468.  STRUCT xxp_ydat,8         ;data    ditto  (no vert)
  469.  STRUCT xxp_yshw,8         ;show    ditto  (no horz, no vert)
  470.  LABEL xxp_ypsz
  471.  
  472. ******************* MACRO's for tandem.library ************************
  473.  
  474. * macro for NewMenu structure
  475. TLnm: MACRO
  476.  IFEQ \1-1
  477.  dc.b NM_TITLE,0
  478.  ENDC
  479.  IFEQ \1-2
  480.  dc.b NM_ITEM,0
  481.  ENDC
  482.  IFEQ \1-3
  483.  dc.b NM_SUB,0
  484.  ENDC
  485.  IFGE \1-4
  486.  dc.b NM_END,0
  487.  ENDC
  488.  IFEQ \2+1
  489.  dc.l NM_BARLABEL
  490.  ENDC
  491.  IFNE \2+1
  492.  dc.l \2
  493.  ENDC
  494.  IFGE NARG-3
  495.  dc.l \3          ;\3=0, CommKey ptr, or 0<strnum<1024, next chr of strnum.
  496.  ENDC             ;      Thus for example all commkeys may be in string 27,
  497.  IFLT NARG-3      ;      when ea. param 3 is 27 & chrs get picked off 1 by 1
  498.  dc.l 0           ;(if no \3, assume 0)
  499.  ENDC
  500.  IFGE NARG-4
  501.  dc.w \4          ;\4=flags (usually omitted)
  502.  ENDC
  503.  IFLT NARG-4
  504.  dc.w 0           ;(if no \4, assume 0)
  505.  ENDC
  506.  IFGE NARG-5
  507.  dc.l \5,0        ;\5=mutual exclude (usually omitted)
  508.  ENDC
  509.  IFLT NARG-5
  510.  dc.l 0,0         ;(if no \5, assume 0)
  511.  ENDC
  512.  ENDM
  513.  
  514. ;  **** All MACRO's *must* be called with A4 pointing to xxp_buff ****
  515.  
  516. * MACRO used by MACRO's below
  517. TLDo: MACRO                ;\1=function name w/out TL, e.g. Height
  518.  move.l a6,-(a7)           ;save all except whatever tandem.library changes
  519.  move.l xxp_tanb(a4),a6    ;a6=tanbase     * Use TLDo direct after loading
  520.  jsr _LVOTL\1(a6)          ;do the call    * the registers "by hand"; else
  521.  move.l (a7)+,a6           ;restore a6     * use the MACRO's below. Assume
  522.  ENDM                      ;               * CCR is undefined after TLDo.
  523.  
  524. * MACRO's for calling tandem.library
  525. TLfsub: MACRO
  526.  move.l d0,-(a7)
  527.  move.l \1,d0
  528.  TLDo Fsub
  529.  move.l (a7)+,d0
  530.  ENDM
  531.  
  532. TLstrbuf: MACRO
  533.  move.l d0,-(a7)
  534.  move.l \1,d0
  535.  TLDo Strbuf
  536.  move.l (a7)+,d0
  537.  ENDM
  538.  
  539. TLstra0: MACRO
  540.  move.l d0,-(a7)
  541.  move.l \1,d0
  542.  TLDo Stra0
  543.  move.l (a7)+,d0
  544.  ENDM
  545.  
  546. TLerror: MACRO
  547.  TLDo Error
  548.  tst.l d0
  549.  eori #-1,CCR
  550.  ENDM
  551.  
  552. TLopenread: MACRO
  553.  TLDo Openread
  554.  tst.l D0
  555.  ENDM
  556.  
  557. TLopenwrite: MACRO
  558.  TLDo Openwrite
  559.  tst.l D0
  560.  ENDM
  561.  
  562. TLwritefile: MACRO
  563.  movem.l d2-d3,-(a7)
  564.  move.l \1,d2
  565.  move.l \2,d3
  566.  TLDo Writefile
  567.  movem.l (a7)+,d2-d3
  568.  tst.l xxp_errn(a4)
  569.  eori #-1,CCR
  570.  ENDM
  571.  
  572. TLreadfile: MACRO
  573.  movem.l d2-d3,-(a7)
  574.  move.l \1,d2
  575.  move.l \2,d3
  576.  TLDo Readfile
  577.  movem.l (a7)+,d2-d3
  578.  tst.l xxp_errn(a4)
  579.  eori #-1,CCR
  580.  ENDM
  581.  
  582. TLclosefile: MACRO
  583.  TLDo Closefile
  584.  ENDM
  585.  
  586. TLaschex: MACRO
  587.  move.l \1,a0
  588.  TLDo Aschex
  589.  tst.l d0
  590.  ENDM
  591.  
  592. TLhexasc: MACRO
  593.  move.l d0,-(a7)
  594.  move.l \1,d0
  595.  move.l \2,a0
  596.  TLDo Hexasc
  597.  move.l (a7)+,d0
  598.  ENDM
  599.  
  600. TLoutput: MACRO
  601.  move.l d0,-(a7)
  602.  TLDo Output
  603.  move.l (a7)+,d0
  604.  ENDM
  605.  
  606. TLinput: MACRO
  607.  move.l d0,-(a7)
  608.  TLDo Input
  609.  move.l (a7)+,d0
  610.  ENDM
  611.  
  612. TLpublic: MACRO
  613.  move.l \1,d0
  614.  TLDo Public
  615.  tst.l d0
  616.  ENDM
  617.  
  618. TLchip: MACRO
  619.  move.l \1,d0
  620.  TLDo Chip
  621.  tst.l d0
  622.  ENDM
  623.  
  624. TLprogdir: MACRO
  625.  TLDo Progdir
  626.  ENDM
  627.  
  628. TLkeyboard: MACRO
  629.  TLDo Keyboard
  630.  ENDM
  631.  
  632. TLwindow: MACRO
  633.  movem.l d1-d7/a0,-(a7)
  634.  move.l \1,d0
  635.  IFGT NARG-1
  636.  move.l \2,d1
  637.  move.l \3,d2
  638.  move.l \4,d3
  639.  move.l \5,d4
  640.  move.l \6,d5
  641.  move.l \7,d6
  642.  move.l \8,d7
  643.  IFGE NARG-9
  644.  move.l \9,a0
  645.  ENDC
  646.  ENDC
  647.  TLDo Window
  648.  movem.l (a7)+,d1-d7/a0
  649.  tst.l d0
  650.  ENDM
  651.  
  652. TLwclose: MACRO
  653.  TLDo Wclose
  654.  ENDM
  655.  
  656. TLtext: MACRO
  657.  movem.l d0-d1,-(a7)
  658.  move.l \1,d0
  659.  move.l \2,d1
  660.  TLDo Text
  661.  movem.l (a7)+,d0-d1
  662.  ENDM
  663.  
  664. TLtsize: MACRO
  665.  TLDo Tsize
  666.  ENDM
  667.  
  668. TLwfront: MACRO
  669.  TLDo Wfront
  670.  ENDM
  671.  
  672. TLgetfont: MACRO
  673.  movem.l d0-d1/a0,-(a7)
  674.  move.l \1,a0
  675.  move.l \2,d0
  676.  move.l \3,d1
  677.  TLDo Getfont
  678.  movem.l (a7)+,d0-d1/a0
  679.  ENDM
  680.  
  681. TLnewfont: MACRO
  682.  movem.l d0-d2,-(a7)
  683.  move.l \1,d0
  684.  move.l \2,d1
  685.  moveq #0,d2
  686.  IFGE NARG-3
  687.  move.l \3,d2
  688.  ENDC
  689.  TLDo Newfont
  690.  tst.l D0
  691.  movem.l (a7)+,d0-d2
  692.  ENDM
  693.  
  694. TLaslfont: MACRO
  695.  movem.l d0-d1,-(a7)
  696.  move.l \1,d0
  697.  TLDo Aslfont
  698.  tst.l d0
  699.  movem.l (a7)+,d0-d1
  700.  ENDM
  701.  
  702. TLaslfile: MACRO
  703.  movem.l d1/a0-a1,-(a7)
  704.  move.l \1,a0
  705.  move.l \2,a1
  706.  move.l \3,d0
  707.  moveq #1,d1
  708.  IFC '\4','sv'
  709.  moveq #-1,d1
  710.  ENDC
  711.  TLDo Aslfile
  712.  movem.l (a7)+,d1/a0-a1
  713.  tst.l d0
  714.  ENDM
  715.  
  716. TLwslof: MACRO
  717.  TLDo Wslof
  718.  ENDM
  719.  
  720. TLreqbev: MACRO
  721.  movem.l d0-d5/a0,-(a7)
  722.  move.l \1,d0
  723.  move.l \2,d1
  724.  move.l \3,d2
  725.  move.l \4,d3
  726.  and.l #$FFFF,d0
  727.  IFGE NARG-5
  728.  IFC '\5','rec'
  729.  bset #31,d0
  730.  ENDC
  731.  IFC '\5','box'
  732.  bset #30,d0
  733.  ENDC
  734.  ENDC
  735.  IFGE NARG-6
  736.  IFNC '\6',''
  737.  move.l \6,a0
  738.  bset #31,d1
  739.  ENDC
  740.  ENDC
  741.  IFGE NARG-7
  742.  bset #29,d0
  743.  move.l \7,d4
  744.  ENDC
  745.  IFEQ NARG-8
  746.  moveq #2,d5
  747.  ENDC
  748.  IFGE NARG-8
  749.  move.l \8,d5
  750.  ENDC
  751.  TLDo Reqbev
  752.  tst.l xxp_errn(a4)
  753.  eori.w #-1,CCR
  754.  movem.l (a7)+,d0-d5/a0
  755.  ENDM
  756.  
  757. TLreqarea: MACRO
  758.  movem.l d0-d4/a0,-(a7)
  759.  move.l \1,d0
  760.  move.l \2,d1
  761.  move.l \3,d2
  762.  move.l \4,d3
  763.  IFGE NARG-5
  764.  IFNC '\5',''
  765.  bset #29,d0
  766.  move.l \5,d4
  767.  ENDC
  768.  ENDC
  769.  IFGE NARG-6
  770.  bset #31,d1
  771.  move.l \6,a0
  772.  ENDC
  773.  TLDo Reqarea
  774.  tst.l xxp_errn(a4)
  775.  eori.w #-1,CCR
  776.  movem.l (a7)+,d0-d4/a0
  777.  ENDM
  778.  
  779. TLreqcls: MACRO
  780.  TLDo Reqcls
  781.  ENDM
  782.  
  783. TLreqfull: MACRO
  784.  TLDo Reqfull
  785.  ENDM
  786.  
  787. TLreqchoose: MACRO
  788.  move.l d1,-(a7)
  789.  moveq #0,d1
  790.  IFEQ NARG-2
  791.  move.l \1,d0
  792.  move.l \2,d1
  793.  ENDC
  794.  TLDo Reqchoose
  795.  move.l (a7)+,d1
  796.  tst.l d0
  797.  ENDM
  798.  
  799. TLreqinput: MACRO
  800.  movem.l d1-d3,-(a7)
  801.  move.l \1,d0
  802.  moveq #0,d1
  803.  moveq #20,d2
  804.  IFGE NARG-2
  805.  IFC '\2','num'
  806.  moveq #-1,d1
  807.  moveq #4,d2
  808.  ENDC
  809.  ENDC
  810.  IFGE NARG-2
  811.  IFC '\2','hex'
  812.  moveq #1,d1
  813.  moveq #8,d2
  814.  ENDC
  815.  ENDC
  816.  IFGE NARG-3
  817.  move.l \3,d2
  818.  ENDC
  819.  moveq #0,d3
  820.  IFGE NARG-4
  821.  move.l \4,d3
  822.  ENDC
  823.  TLDo Reqinput
  824.  move.l d0,d1
  825.  move.l xxp_valu(a4),d0
  826.  tst.l d1
  827.  movem.l (a7)+,d1-d3
  828.  ENDM
  829.  
  830. TLreqedit: MACRO
  831.  movem.l d1/a0,-(a7)
  832.  move.l \1,d0
  833.  move.l \2,d1
  834.  
  835.  IFNC '\3','0'           ;do if \3 = custom tags
  836.  IFNC '\3','1'
  837.  move.l \3,a0
  838.  TLDo Reqedit
  839.  movem.l (a7)+,d1/a0
  840.  tst.l xxp_errn(a4)
  841.  eori.w #-1,CCR
  842.  MEXIT
  843.  ENDC
  844.  ENDC
  845.  
  846.  movem.l a1/a5,-(a7)      ;do if \3 = 0 or 1 (default tags for plain, styl)
  847.  sub.w #100,a7
  848.  move.l a7,a1
  849.  move.l #xxp_xtext,(a1)+  ;tag 1: text = a4
  850.  move.l a4,(a1)+
  851.  IFC '\3','1'
  852.  move.l #xxp_xstyl,(a1)+  ;tag 2: styl = FWork+256    (tag 2-4 styl only)
  853.  move.l xxp_FWork(a4),(a1)
  854.  add.l #256,(a1)+
  855.  move.l #xxp_xfont,(a1)+  ;tag 3: font = as per AcWind
  856.  move.l xxp_AcWind(a4),a5
  857.  clr.w (a1)+
  858.  move.w xxp_Fnum(a5),(a1)+
  859.  move.l #xxp_xcspc,(a1)+  ;tag 4: cspc = as per AcWind
  860.  clr.w (a1)+
  861.  move.w xxp_Tspc(a5),(a1)+
  862.  ENDC
  863.  move.l #xxp_xmaxc,(a1)+  ;tag 5: maxc = \4, deflt 20, or 4 if num, 8 if hex
  864.  move.l #20,(a1)+
  865.  IFGE NARG-8
  866.  IFC '\8','num'
  867.  move.l #4,-4(a1)
  868.  ENDC
  869.  IFC '\8','hex'
  870.  move.l #8,-4(a1)
  871.  ENDC
  872.  ENDC
  873.  IFGE NARG-4
  874.  IFNC '\4',''
  875.  move.l \4,-4(a1)
  876.  ENDC
  877.  ENDC
  878.  IFGE NARG-5              ;tag 6: maxt = \5, dflt none
  879.  IFNC '\5',''
  880.  move.l #xxp_xmaxt,(a1)+
  881.  move.l \5,(a1)+
  882.  ENDC
  883.  ENDC
  884.  IFGE NARG-6              ;tag 7: maxw = \6, dflt none
  885.  IFNC '\6',''
  886.  move.l #xxp_xmaxw,(a1)+
  887.  move.l \6,(a1)+
  888.  ENDC
  889.  ENDC
  890.  IFGE NARG-7              ;tag 8: menu = \7, dflt none
  891.  IFNC '\7',''
  892.  move.l #xxp_xmenu,(a1)+
  893.  move.l \7,(a1)+
  894.  ENDC
  895.  ENDC
  896.  IFGE NARG-8              ;tag 9: task = str/num/hex, default str
  897.  IFNC '\8',''
  898.  move.l xxp_xtask,(a1)+
  899.  clr.l (a1)+
  900.  IFC '\8','num'
  901.  move.l #xxp_xtdec,-4(a1)
  902.  ENDC
  903.  IFC \'8','hex'
  904.  move.l #xxp_xthex,-4(a1)
  905.  ENDC
  906.  ENDC
  907.  ENDC
  908.  move.l #xxp_xiclr,(a1)+  ;tag 10: iclr = -1
  909.  move.l #-1,(a1)+
  910.  move.l #xxp_xtral,(a1)+  ;tag 11: tral = -1
  911.  move.l #-1,(a1)+
  912.  move.l #xxp_xforb,(a1)+
  913.  IFC '\3','0'             ;tag 12: forb = 0/xxp_xesty
  914.  move.l #xxp_xesty,(a1)+
  915.  ENDC
  916.  IFC '\3','1'
  917.  clr.l (a1)+
  918.  ENDC
  919.  clr.l (a1)               ;delimit tags
  920.  move.l a7,a0
  921.  TLDo Reqedit             ;do the edit
  922.  add.w #100,a7            ;discard tags
  923.  movem.l (a7)+,a1/a5
  924.  movem.l (a7)+,d1/a0
  925.  tst.l xxp_errn(a4)
  926.  eori.w #-1,CCR
  927.  ENDM
  928.  
  929. TLreqshow: MACRO
  930.  movem.l d1-d2/a5,-(a7)
  931.  move.l \1,a0
  932.  move.l \2,d0
  933.  move.l \3,d1
  934.  move.l \4,d2
  935.  moveq #0,d3
  936.  IFGE NARG-5
  937.  move.l \5,d3
  938.  ENDC
  939.  IFGE NARG-6
  940.  IFC 'seek','\6'
  941.  bset #31,d2
  942.  ENDC
  943.  IFC 'smart','\6'
  944.  bset #31,d2
  945.  bset #30,d2
  946.  ENDC
  947.  ENDC
  948.  TLDo Reqshow
  949.  movem.l (a7)+,d1-d2/a5
  950.  tst.l d0
  951.  ENDM
  952.  
  953. TLassdev: MACRO
  954.  TLDo Assdev
  955.  tst.l d0
  956.  ENDM
  957.  
  958. TLreqmenu: MACRO
  959.  movem.l d0/a0,-(a7)
  960.  move.l \1,a0
  961.  TLDo Reqmenu
  962.  tst.l d0
  963.  movem.l (a7)+,d0/a0
  964.  ENDM
  965.  
  966. TLreqmuset: MACRO
  967.  TLDo Reqmuset
  968.  ENDM
  969.  
  970. TLreqmuclr: MACRO
  971.  TLDo Reqmuclr
  972.  ENDM
  973.  
  974. TLreqinfo: MACRO
  975.  movem.l d1-d2,-(a7)
  976.  move.l \1,d0
  977.  moveq #1,d1
  978.  moveq #1,d2
  979.  IFNE NARG-1
  980.  move.l \2,d1
  981.  IFNE NARG-2
  982.  move.l \3,d2
  983.  ENDC
  984.  ENDC
  985.  TLDo Reqinfo
  986.  movem.l (a7)+,d1-d2
  987.  tst.l d0
  988.  ENDM
  989.  
  990. TLwpoll: MACRO
  991.  TLDo Wpoll
  992.  tst.l d0
  993.  ENDM
  994.  
  995. TLtrim: MACRO
  996.  movem.l d0-d1,-(a7)
  997.  move.l \1,d0
  998.  move.l \2,d1
  999.  TLDo Trim
  1000.  tst.l xxp_errn(a4)
  1001.  eori.w #-1,CCR
  1002.  movem.l (a7)+,d0-d1
  1003.  ENDM
  1004.  
  1005. TLwsub: MACRO
  1006.  move.l d0,-(a7)
  1007.  move.l \1,d0
  1008.  TLDo Wsub
  1009.  move.l (a7)+,d0
  1010.  ENDM
  1011.  
  1012. TLwpop: MACRO
  1013.  move.l d0,-(a7)
  1014.  move.l \1,d0
  1015.  TLDo Wpop
  1016.  move.l (a7)+,d0
  1017.  ENDM
  1018.  
  1019. TLmultiline: MACRO
  1020.  movem.l d0-d1,-(a7)
  1021.  move.l \1,d0
  1022.  move.l \2,d1
  1023.  TLDo Multiline
  1024.  movem.l (a7)+,d0-d1
  1025.  tst.l xxp_errn(a4)
  1026.  eori.w #-1,ccr
  1027.  ENDM
  1028.  
  1029. TLwupdate: MACRO
  1030.  TLDo Wupdate
  1031.  ENDM
  1032.  
  1033. TLwcheck: MACRO
  1034.  movem.l d0-d1,-(a7)
  1035.  TLDo Wcheck
  1036.  tst.l d0
  1037.  movem.l (a7)+,d0-d1
  1038.  ENDM
  1039.  
  1040. TLfloat: MACRO
  1041.  move.l \1,a0
  1042.  move.l \2,a1
  1043.  TLDo Float
  1044.  tst.w d0
  1045.  eori.w #-1,ccr
  1046.  ENDM
  1047.  
  1048. TLbusy: MACRO
  1049.  TLDo Busy
  1050.  ENDM
  1051.  
  1052. TLunbusy: MACRO
  1053.  TLDo Unbusy
  1054.  ENDM
  1055.  
  1056. TLreqcolor: MACRO
  1057.  move.l \1,d0
  1058.  TLDo Reqcolor
  1059.  tst.l d0
  1060.  ENDM
  1061.  
  1062. TLonmenu: MACRO
  1063.  movem.l d0-d2,-(a7)
  1064.  move.l \1,d0
  1065.  move.l \2,d1
  1066.  move.l \3,d2
  1067.  TLDo Onmenu
  1068.  movem.l (a7)+,d0-d2
  1069.  ENDM
  1070.  
  1071. TLoffmenu: MACRO
  1072.  movem.l d0-d2,-(a7)
  1073.  move.l \1,d0
  1074.  move.l \2,d1
  1075.  move.l \3,d2
  1076.  TLDo Offmenu
  1077.  movem.l (a7)+,d0-d2
  1078.  ENDM
  1079.  
  1080. TLprefdir: MACRO
  1081.  movem.l d0/a0,-(a7)
  1082.  move.l \1,a0
  1083.  moveq #0,d0
  1084.  IFC '\2','save'
  1085.  moveq #-1,d0
  1086.  ENDC
  1087.  TLDo Prefdir
  1088.  movem.l (a7)+,d0/a0
  1089.  ENDM
  1090.  
  1091. TLpreffil: MACRO
  1092.  movem.l d0-d3/a0,-(a7)
  1093.  move.l \1,a0
  1094.  moveq #0,d0
  1095.  IFC '\2','save'
  1096.  moveq #-1,d0
  1097.  ENDC
  1098.  move.l \3,d2
  1099.  move.l \4,d3
  1100.  TLDo Preffil
  1101.  movem.l (a7)+,d0-d3/a0
  1102.  ENDM
  1103.  
  1104. TLbad: MACRO
  1105.  move.l d0,-(a7)
  1106.  move.l \1,d0
  1107.  TLDo Strbuf
  1108.  TLDo Output
  1109.  move.l (a7)+,d0
  1110.  subq.w #1,xxp_ackn(a4)
  1111.  ENDM
  1112.  
  1113. TLstring: MACRO
  1114.  TLstrbuf \1
  1115.  TLtrim \2,\3
  1116.  ENDM
  1117.  
  1118. TLoutstr: MACRO
  1119.  TLstrbuf \1
  1120.  TLoutput
  1121.  ENDM
  1122.  
  1123. * easy call to TLWindow  (opens window 0, title must be in st_1)
  1124. TLwindow0: MACRO
  1125.  TLwindow #-1
  1126.  TLwindow #0,#0,#0,#640,#100,xxp_Width(a4),xxp_Height(a4),#0,#st_1
  1127.  ENDM
  1128.  
  1129. * open a private screen for WSuite \1=depth, \2=title, \3=pens [\4 display]
  1130. TLscreen: MACRO
  1131.  movem.l d0-d1/a0-a1/a6,-(a7)
  1132.  sub.l #52,a7                 ;room for 6 tags
  1133.  move.l a7,a0
  1134.  move.l #SA_Width,(a0)+       ;tag 1
  1135.  move.l #STDSCREENWIDTH,(a0)+
  1136.  move.l #SA_Height,(a0)+      ;tag 2
  1137.  move.l #STDSCREENHEIGHT,(a0)+
  1138.  move.l #SA_Depth,(a0)+       ;tag 3
  1139.  move.l \1,(a0)+
  1140.  move.l #SA_Title,(a0)+       ;tag 4
  1141.  move.l \2,(a0)+
  1142.  move.l #SA_Pens,(a0)+        ;tag 5
  1143.  move.l \3,(a0)+
  1144.  move.l #SA_DisplayID,(a0)+   ;tag 6
  1145.  IFEQ NARG-3
  1146.  move.l #HIRES_KEY,(a0)+      ;no \4, hires
  1147.  ENDC
  1148.  IFEQ NARG-4
  1149.  move.l \4,(a0)+              ;if \4 -> display id
  1150.  ENDC
  1151.  move.l #TAG_END,(a0)+        ;delimit
  1152.  move.l xxp_intb(a4),a6
  1153.  sub.l a0,a0
  1154.  move.l a7,a1
  1155.  jsr _LVOOpenScreenTagList(a6)
  1156.  clr.w xxp_Public(a4)         ;tell Front.i to close screen on closedown
  1157.  add.l #52,a7
  1158.  move.l d0,xxp_Screen(a4)
  1159.  movem.l (a7)+,d0-d1/a0-a1/a6 ;EQ if bad
  1160.  ENDM
  1161.  
  1162. * attach mem to a windows Mmem   a5=window's wsuw  \1=addr  \2=size
  1163. * The mem *must* created by AllocVec (*not* e.g. TLpublic)
  1164. TLattach: MACRO
  1165.  movem.l d0-d1/a0,-(a7)    ;save all
  1166.  move.l \1,a0
  1167.  move.l a0,xxp_Mmem(a5)    ;put in mem pointer
  1168.  clr.b (a0)+               ;initialise text memory
  1169.  move.l a0,xxp_Mtop(a5)
  1170.  subq.l #1,a0
  1171.  move.l \2,d0              ;d0 = Mmsz
  1172.  move.l d0,xxp_Mmsz(a5)
  1173.  add.l d0,a0
  1174.  clr.b -34(a0)             ;init ffil } file, dir used in TLMultiline
  1175.  clr.b -164(a0)            ;init fdir } TLAslfile calls
  1176.  clr.l xxp_Mcrr(a5)
  1177.  clr.l xxp_Mtpl(a5)
  1178.  move.w #76,xxp_Mmxc(a5)
  1179.  movem.l (a7)+,d0-d1/a0
  1180.  ENDM
  1181.  
  1182. TLgetilbm: MACRO
  1183.  movem.l d0-d1/a1,-(a7)
  1184.  moveq #-1,d0
  1185.  move.l \1,d1
  1186.  move.l \2,a1
  1187.  IFGE NARG-3
  1188.  IFNC '\3',''
  1189.  moveq #0,d0
  1190.  ENDC
  1191.  ENDC
  1192.  IFGE NARG-4
  1193.  bset #31,d1
  1194.  ENDC
  1195.  TLDo Getilbm
  1196.  movem.l (a7)+,d0-d1/a1
  1197.  tst.l xxp_errn(a4)
  1198.  eori.w #-1,CCR
  1199.  ENDM
  1200.  
  1201. TLputilbm: MACRO
  1202.  movem.l d0-d3/a0,-(a7)
  1203.  move.l \1,d0
  1204.  move.l \2,d1
  1205.  move.l \3,d2
  1206.  move.l \4,d3
  1207.  move.l \5,a0
  1208.  TLDo Putilbm
  1209.  movem.l (a7)+,d0-d3/a0
  1210.  tst.l xxp_errn(a4)
  1211.  eori.w #-1,CCR
  1212.  ENDM
  1213.  
  1214. TLresize: MACRO
  1215.  movem.l d0-d5/a0,-(a7)
  1216.  move.l \1,d0
  1217.  move.l \2,d1
  1218.  move.l \3,d2
  1219.  move.l \4,d3
  1220.  move.l \5,d4
  1221.  move.l \6,d5
  1222.  moveq #0,d6
  1223.  IFGE NARG-7
  1224.  IFNC '\7',''
  1225.  move.l \7,d6
  1226.  ENDC
  1227.  ENDC
  1228.  IFGE NARG-8
  1229.  move.l \8,a0
  1230.  bset #31,d1
  1231.  ENDC
  1232.  TLDo Resize
  1233.  movem.l (a7)+,d0-d5/a0
  1234.  ENDM
  1235.  
  1236. TLellipse: MACRO
  1237.  movem.l d0-d7/a0,-(a7)
  1238.  move.l \1,d0
  1239.  move.l \2,d1
  1240.  move.l \3,d2
  1241.  move.l \4,d3
  1242.  move.l \5,d4
  1243.  move.l \6,d5
  1244.  move.l \7,d6
  1245.  move.l \8,d7
  1246.  IFGE NARG-9
  1247.  IFNC '\9',''
  1248.  move.l \9,a0
  1249.  bset #31,d1
  1250.  ENDC
  1251.  IFGE NARG-10
  1252.  bset #31,d0
  1253.  ENDC
  1254.  ENDC
  1255.  TLDo Ellipse
  1256.  movem.l (a7)+,d0-d7/a0
  1257.  tst.l xxp_errn(a4)
  1258.  eori.w #-1CCR
  1259.  ENDM
  1260.  
  1261. TLgetarea: MACRO
  1262.  movem.l d0-d3/a0,-(a7)
  1263.  move.l \1,d0
  1264.  move.l \2,d1
  1265.  move.l \3,d2
  1266.  move.l \4,d3
  1267.  move.l \5,a0
  1268.  TLDo Getarea
  1269.  tst.l d0
  1270.  movem.l (a7)+,d0-d3/a0
  1271.  ENDM
  1272.  
  1273. TLprogress: MACRO
  1274.  movem.l d0-d2,-(a7)
  1275.  move.l \1,d0
  1276.  move.l \2,d1
  1277.  moveq #0,d2
  1278.  IFGE NARG-3
  1279.  moveq #-1,d2
  1280.  IFC '\3','%'
  1281.  moveq #1,d2
  1282.  ENDC
  1283.  ENDC
  1284.  TLDo Progress
  1285.  movem.l (a7)+,d0-d2
  1286.  tst.l xxp_errn(a4)
  1287.  eori.w #-1,CCR
  1288.  ENDM
  1289.  
  1290. TLreqoff: MACRO
  1291.  TLDo Reqoff
  1292.  ENDM
  1293.  
  1294. TLhexasc16: MACRO
  1295.  movem.l d0-d1,-(a7)
  1296.  move.l \1,d0
  1297.  move.l \2,d1
  1298.  move.l \3,a0
  1299.  TLDo Hexasc16
  1300.  movem.l (a7)+,d0-d1
  1301.  ENDM
  1302.  
  1303. TLreqfont: MACRO
  1304.  move.l \1,d0
  1305.  TLDo Reqfont
  1306.  tst.l xxp_errn(a4)
  1307.  eori.w #-1,CCR
  1308.  ENDM
  1309.  
  1310. TLdata: MACRO
  1311.  movem.l d0-d1,-(a7)
  1312.  move.l \1,d0
  1313.  move.l \2,d1
  1314.  TLDo Data
  1315.  tst.l d0
  1316.  movem.l (a7)+,d0-d1
  1317.  ENDM
  1318.  
  1319. TLwscroll: MACRO
  1320.  movem.l d0-d1,-(a7)
  1321.  moveq #-1,d0
  1322.  IFC '\1','set'
  1323.  moveq #0,d0
  1324.  ENDC
  1325.  moveq #0,d1
  1326.  IFGE NARG-2
  1327.  IFC '\2','vert'
  1328.  moveq #-1,d1
  1329.  ENDC
  1330.  IFC '\2','horz'
  1331.  moveq #1,d1
  1332.  ENDC
  1333.  ENDC
  1334.  TLDo Wscroll
  1335.  movem.l (a7)+,d0-d1
  1336.  ENDM
  1337.  
  1338. TLbutmon: MACRO
  1339.  movem.l d1-d2,-(a7)
  1340.  move.l \1,d1
  1341.  move.l \2,d2
  1342.  TLDo Butmon
  1343.  tst.l d0
  1344.  movem.l (a7)+,d1-d2
  1345.  ENDM
  1346.  
  1347. TLbutstr: MACRO
  1348.  move.l a0,-(a7)
  1349.  move.l \1,a0
  1350.  TLDo Butstr
  1351.  move.l (a7)+,a0
  1352.  ENDM
  1353.  
  1354. TLbutprt: MACRO
  1355.  TLDo Butprt
  1356.  tst.l xxp_errn(a4)
  1357.  eori.w #-1,CCR
  1358.  ENDM
  1359.  
  1360. TLbuttxt: MACRO
  1361.  move.l a0,-(a7)
  1362.  move.l \1,a0
  1363.  TLDo Buttxt
  1364.  move.l (a7)+,a0
  1365.  tst.l xxp_errn(a4)
  1366.  eori.w #-1,CCR
  1367.  ENDM
  1368.  
  1369. TLslider: MACRO
  1370.  move.l a5,-(a7)
  1371.  move.l \1,a5
  1372.  TLDo Slider
  1373.  move.l (a7)+,a5
  1374.  tst.l xxp_errn(a4)
  1375.  eori.w #-1,CCR
  1376.  ENDM
  1377.  
  1378. TLpassword: MACRO
  1379.  move.l \1,d0
  1380.  TLDo Password
  1381.  tst.l d0
  1382.  ENDM
  1383.  
  1384. TLslimon: MACRO
  1385.  movem.l d0-d3,-(a7)
  1386.  move.l \1,d1
  1387.  move.l \2,d2
  1388.  move.l \3,d3
  1389.  TLDo Slimon
  1390.  tst.l d0
  1391.  movem.l (a7)+,d0-d3
  1392.  ENDM
  1393.  
  1394. TLreqredi: MACRO
  1395.  move.l a5,-(a7)
  1396.  move.l \1,a5
  1397.  TLDo Reqredi
  1398.  move.l (a7)+,a5
  1399.  ENDM
  1400.  
  1401. TLreqchek: MACRO
  1402.  movem.l d2-d3,-(a7)
  1403.  move.l \1,d2
  1404.  move.l \2,d3
  1405.  TLDo Reqchek
  1406.  movem.l (a7)+,d2-d3
  1407.  tst.l xxp_errn(a4)
  1408.  eori.w #-1,CCR
  1409.  ENDM
  1410.  
  1411. TLreqon: MACRO
  1412.  move.l \1,a5
  1413.  TLDo Reqon
  1414.  tst.l xxp_errn(a4)
  1415.  eori.w #-1,CCR
  1416.  ENDM
  1417.  
  1418. TLprefs: MACRO
  1419.  move.l d0,-(a7)
  1420.  moveq #1,d0
  1421.  IFGE NARG-1
  1422.  moveq #-1,d0
  1423.  ENDC
  1424.  TLDo Prefs
  1425.  move.l (a7)+,d0
  1426.  ENDM
  1427.  
  1428. TLmget: MACRO
  1429.  TLDo Mget
  1430.  tst.l d0
  1431.  ENDM
  1432.  
  1433. TLfreebmap: MACRO
  1434.  movem.l d0-d2/a0-a3/a6,-(a7)
  1435.  move.l xxp_sysb(a4),a6
  1436.  move.l \1,a3
  1437.  move.l a3,a2
  1438.  addq.l #bm_Planes,a2
  1439.  moveq #0,d2
  1440.  move.b bm_Depth(a3),d2
  1441.  subq.w #1,d2
  1442. .fbmp:
  1443.  move.l (a2)+,a1
  1444.  jsr _LVOFreeVec(a6)
  1445.  dbra d2,.fbmp
  1446.  move.l a3,a1
  1447.  jsr _LVOFreeVec(a6)
  1448.  movem.l (a7)+,d0-d2/a0-a3/a6
  1449.  ENDM
  1450.  
  1451. TLembed: MACRO
  1452.  ENDM
  1453.  
  1454. TLtabmon: MACRO
  1455.  movem.l d1-d3,-(a7)
  1456.  move.l \1,d0
  1457.  move.l \2,d1
  1458.  move.l \3,d2
  1459.  move.l \4,d3
  1460.  TLDo Tabmon
  1461.  movem.l (a7)+,d1-d3
  1462.  tst.l d0
  1463.  ENDM
  1464.  
  1465. TLpict:MACRO
  1466.  movem.l d0-d2,-(a7)
  1467.  move.l \1,d0
  1468.  move.l \2,d1
  1469.  move.l \3,d2
  1470.  TLDo Pict
  1471.  movem.l (a7)+,d0-d2
  1472.  tst.l xxp_errn(a4)
  1473.  eori.w #-1,CCR
  1474.  ENDM
  1475.  
  1476. TLtabs: MACRO
  1477.  movem.l d0-d3,-(a7)
  1478.  move.l \1,d0
  1479.  IFGE NARG-2
  1480.  move.l \2,d1
  1481.  IFGE NARG-3
  1482.  move.l \3,d2
  1483.  IFGE NARG-4
  1484.  move.l \4,d3
  1485.  ENDC
  1486.  ENDC
  1487.  ENDC
  1488.  TLDo Tabs
  1489.  movem.l (a7)+,d0-d3
  1490.  tst.l xxp_errn(a4)
  1491.  eori.w #-1,CCR
  1492.  ENDM
  1493.  
  1494. TLdropdown: MACRO
  1495.  movem.l d0-d7,-(a7)
  1496.  moveq #-1,d0
  1497.  IFC 'draw','\1'
  1498.  moveq #0,d0
  1499.  ENDC
  1500.  move.l \2,d1
  1501.  move.l \3,d2
  1502.  moveq #1,d3
  1503.  IFNC '','\4'
  1504.  move.l \4,d3
  1505.  ENDC
  1506.  move.l \5,d4
  1507.  move.l \6,d5
  1508.  moveq #0,d6
  1509.  IFGE NARG-7
  1510.  IFNC '','\7'
  1511.  move.l \7,d6
  1512.  ENDC
  1513.  ENDC
  1514.  moveq #7,d7
  1515.  IFGE NARG-8
  1516.  IFNC 'cycle','\8'
  1517.  move.l \8,d7
  1518.  ENDC
  1519.  IFC 'cycle','\8'
  1520.  moveq #-1,d7
  1521.  ENDC
  1522.  ENDC
  1523.  TLDo Dropdown
  1524.  IFNC 'draw','\1'
  1525.  move.l d0,(a7)
  1526.  ENDC
  1527.  movem.l (a7)+,d0-d7
  1528.  IFC 'draw','\1'
  1529.  tst.l xxp_errn(a4)
  1530.  eori.w #-1,CCR
  1531.  ENDC
  1532.  ENDM
  1533.